/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.Controle;
import br.Modelo.Cliente;
import br.Modelo.Cidade;
import com.sun.media.sound.ModelOscillator;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
/**
 *
 * @author ItaloLopes
 */
public class ControleCliente {
    private Cliente objCliente;
    private Cidade objCidade;
    
    public ControleCliente()
    {
        this.objCliente = new Cliente();
        this.objCidade = new Cidade();
    }
    
    public Double Salvar(ArrayList<String> pLista)
    {
        this.objCliente.setNome(pLista.get(1));
        this.objCliente.setCPF(Double.parseDouble(pLista.get(2)));
        this.objCliente.setLogradouro(pLista.get(3));
        this.objCliente.setNumero(Integer.parseInt(pLista.get(4)));
        this.objCliente.setBairro(pLista.get(5));
        this.objCliente.setCidade(objCidade.RecuperaObjetoNome(pLista.get(6)));
        
        this.objCliente.setProximoCodigoInsercao();
        
        this.objCliente.Salvar();
        return this.objCliente.getCodigoCliente();
    }
    
    public ArrayList<String> ConverterObjetoParaArray(){
        ArrayList<String> vetCampos = new ArrayList<String>();
        vetCampos.add(String.valueOf(this.objCliente.getCodigoCliente()));
        vetCampos.add(this.objCliente.getNome());
        vetCampos.add(String.valueOf(this.objCliente.getCPF()));
        vetCampos.add(this.objCliente.getLogradouro());
        vetCampos.add(String.valueOf(this.objCliente.getNumero()));
        vetCampos.add(this.objCliente.getBairro());
        vetCampos.add(this.objCliente.getCidade().getNomeCidade());
        vetCampos.add(String.valueOf(this.objCliente.getCidade().getCodigoCidade()));
        
        return vetCampos;
    }
    
    public ArrayList<String> RecuperaObjetos(int pCodigo)
    {
        objCliente = objCliente.RecuperaObjeto(pCodigo);
        return ConverterObjetoParaArray();
    }
    
    public ArrayList<String> RecuperaObjetoNavegacao(int pOpcao, int pCodAtual)
    {
        objCliente = objCliente.RecuperaObjetoNavegacao(pOpcao, pCodAtual);
        return ConverterObjetoParaArray();
    }
    
    public void Atualizar(ArrayList<String> pLista)
    {
        this.objCliente.setCodigoCliente(Double.parseDouble(pLista.get(0)));
        this.objCliente.setNome(pLista.get(1));
        this.objCliente.setCPF(Double.parseDouble(pLista.get(2)));
        this.objCliente.setLogradouro(pLista.get(3));
        this.objCliente.setNumero(Integer.parseInt(pLista.get(4)));
        this.objCliente.setBairro(pLista.get(5));
        this.objCliente.setCidade(objCidade);
        
        this.objCliente.Alterar();
    }
    
    public void Excluir(double pCodigo)
    {
        this.objCliente.setCodigoCliente((int)pCodigo);
        this.objCliente.Excluir();
    }
    
    public DefaultTableModel PesquisaObjeto(ArrayList<String> Parametros, DefaultTableModel TabelaModelo){
        // Decodificando o arraylist em variáveis.
        String Campo = Parametros.get(0);
        String Valor = Parametros.get(1);
        boolean EmQualquerParte = Parametros.get(2).equals("S");
        
        //Efetuando a pesquisa de objetos no banco de dados.
        ArrayList<Cliente> Cliente = this.objCliente.RecuperaObjetos(Campo, Valor, EmQualquerParte);
        
        // Preenchendo a tabela com os dados retornados.
        Vector<String> vetVetor;
        Cliente objClienteBuffer;
        
        for(int i=0; i<Cliente.size(); i++){
            objCidade.setNomeCidade(Cliente.get(i).getCidade().getNomeCidade());
            vetVetor = new Vector<String>();
            objClienteBuffer = Cliente.get(i);
            
            vetVetor.addElement(String.valueOf(objClienteBuffer.getCodigoCliente()));
            vetVetor.addElement(objClienteBuffer.getNome());
            vetVetor.addElement(String.valueOf(objClienteBuffer.getCPF()));
            vetVetor.addElement(objCidade.getNomeCidade());
            TabelaModelo.addRow(vetVetor);
        }
        
        return TabelaModelo;
    }
}
